//
//  StatusListViewModel.swift
//  我的微博
//
//  Created by ZhangChao on 15/9/8.
//  Copyright © 2015年 ZhangChao. All rights reserved.
//

import UIKit
import ReactiveCocoa
import SDWebImage

class StatusListViewModel: NSObject {

    // 定义模型数组
//    lazy var statuses : [AnyObject] = [StatusViewModel]()
    
    lazy var statuses = [StatusViewModel]()
    
    // 记录图片大小
    var dataLength = 0
    
    // 加载微博数据
    func loadStatuses() -> RACSignal{
        
        return RACSignal.createSignal({ [weak self](subscriber) -> RACDisposable! in
            
            NetWorkTools.sharedTools.loadStatus().subscribeNext({ (result) -> Void in
                
                // 1.获取result中的字典数组
                guard let array = result["statuses"] as? [[String : AnyObject]] else{
                    
                    printLog("没有正确的数据")
                    
                    return
                }
                
                // printLog(array)
                // 2.字典转模型
                if self?.statuses == nil {
                    
                    self?.statuses = [StatusViewModel]()
                }
                
                // 定义可变数组,为刷新数据服务
                var arrayM = [StatusViewModel]()
                
                // 遍历数组
                for dict in array {
                    
                    arrayM.append( StatusViewModel(status:Status(dict: dict)))
                }
                
                // 缓存图片
                self?.cacheWebImage(arrayM){
                    
                    // 给数据模型赋值
                    self?.statuses = arrayM
                    
                    // 3.通知调用方
                    subscriber.sendCompleted()
                }
                
                }, error: { (error) -> Void in
                    
                    subscriber.sendError(error)
                }) {}

            return nil
        })
    }
    
    private func cacheWebImage(array : [StatusViewModel],finish: ()->()){
        
        // 1.定义调度组
        let group = dispatch_group_create()
        
        for viewModel in array{
            
            let imageCount = viewModel.thumbnailUrl!.count ?? 0
            
            if imageCount != 1{
                
                continue
            }
            
            // printLog(viewModel.thumbnailUrl)
            // 2.入组 (这个操作要紧贴着block)
            dispatch_group_enter(group)
            
            // 用SDWebImage 下载图片到本地
            SDWebImageManager.sharedManager().downloadImageWithURL(viewModel.thumbnailUrl![0], options: [], progress: nil, completed: { (image, _, _, _, _) -> Void in
                
                // 图片下载完成可以做更新UI的操作 
                // 图片不一定有值
                if image != nil{
                    
                    let data = UIImagePNGRepresentation(image);
                    
                    self.dataLength = data?.length ?? 0
                }
                
                // 3.出组 (这个操作必须写在出组的最后一句)
                dispatch_group_leave(group)
            })
        }
        
        // 4.监听调度组
        dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
            
            finish()
            printLog("图像缓存完成,大小:\(self.dataLength / 1024) K")
        }
        
    }
}
